var map;
var geocoder;
var directionsDisplay;
var directionsService;
var startMarker;
var start;
var end;
// Keep track of where you clicked
var clickedLatLng;
var point
//Mảng quản lý các marker
var MarkersList = [];
//Mảng quản lý các infoWindow
var infoWindowList = [];
//Ban kinh tim kiem
var radius;
var link;
//chuoi dieu kien tim kiem
var conditionString;
//Mảng ket quả tìm kiếm
var NewsIdList = new Array();

var domainUrl=window.location.href.match(/:\/\/(.[^/]+)/)[1];
$(document).ready(function(){
		initialize();
		AdvanceSearch();
});

function initialize() {
    directionsDisplay = new google.maps.DirectionsRenderer();
    var myOptions = {
        zoom: 13,
        center: new google.maps.LatLng(10.779622500015304, 106.68488502502441),
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        overviewMapControl: true,
        overviewMapControlOptions: {
        opened: true
        }
    };
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);



    directionsService = new google.maps.DirectionsService();
    directionsDisplay = new google.maps.DirectionsRenderer();
    directionsDisplay.setMap(map);
    directionsDisplay.setPanel(document.getElementById("DirectionResult"));

    // Create the context menu

    // Create the context menu element
    var contextMenu = $(document.createElement('ul'))
			.attr('id', 'contextMenu');

    // Fill our context menu with links
    contextMenu.append(
			'<li class="map_ZoomIn"><a href="#zoomIn">Phóng to</a></li>' +
			'<li class="map_ZoomOut"><a href="#zoomOut">Thu nhỏ</a></li>' +
			'<li  class="map_Center"><a href="#centerHere">Căn giữa</a></li>' +
            '<li  class="map_Find"><a href="#around">Tìm quanh khu vực</a></li>' +
            '<li class="map_separate"></li>' +
            '<li class="map_from"><a href="#from">Điểm xuất phát</a></li>' +
            '<li class="map_to"><a href="#to">Đến đích</a></li>'
		);

    // Disable the browser context menu on our context menu
    contextMenu.bind('contextmenu', function () { return false; });

    // Append it to the map object
    $(map.getDiv()).append(contextMenu);

    /**
    * Menu events
    */

    // Display and position the menu
    google.maps.event.addListener(map, 'rightclick', function (e) {
        // start buy hiding the context menu if its open
        contextMenu.hide();

        var mapDiv = $(map.getDiv()),
				x = e.pixel.x,
				y = e.pixel.y;

        // save the clicked location
        clickedLatLng = e.latLng;

        // adjust if clicked to close to the edge of the map
        if (x > mapDiv.width() - contextMenu.width())
            x -= contextMenu.width();

        if (y > mapDiv.height() - contextMenu.height())
            y -= contextMenu.height();

        // Set the location and fade in the context menu
        contextMenu.css({ top: y, left: x }).fadeIn(100);
        
    });

    // Set some events on the context menu links
    contextMenu.find('a').click(function () {
        // fade out the menu
        contextMenu.fadeOut(75);

        var action = $(this).attr('href').substr(1);

        switch (action) {
            case 'zoomIn':
                map.setZoom(
						map.getZoom() + 1
					);
                map.panTo(clickedLatLng);
                break;

            case 'zoomOut':
                map.setZoom(
						map.getZoom() - 1
					);
                map.panTo(clickedLatLng);
                break;

            case 'centerHere':
                map.panTo(clickedLatLng);
                break;

            case 'around':
                RadiusDialog(clickedLatLng);
                break;
            case 'from':
                start = clickedLatLng;

                if(!startMarker)
                {
                    var image = new google.maps.MarkerImage("images/marker_greenA.png",
                        new google.maps.Size(32.0, 32.0),
                        new google.maps.Point(0, 0),
                        new google.maps.Point(16.0, 16.0)
                    );
                    var shadow = new google.maps.MarkerImage("images/shadow50.png",
                        new google.maps.Size(49.0, 32.0),
                        new google.maps.Point(0, 0),
                        new google.maps.Point(16.0, 16.0)
                    );

                    startMarker = new google.maps.Marker({
                        position: clickedLatLng,
                        map: map,
                        icon: image,
                        shadow: shadow
                    });   
                }
                else
                {
                    startMarker.setMap(map);
                    startMarker.setPosition(clickedLatLng);
                }
                break;
            case 'to':
                if(start == null || start == '')
                {
                    alert("Bạn chưa chọn điểm xuất phát ! Chuột phải lên bản đồ để chọn địa điểm xuất phát");
                    return;
                }

                startMarker.setMap(null);
                end = clickedLatLng;

                calcRoute();
                break;
        }

        return false;
    });

    // Hover events for effect
    contextMenu.find('a').hover(function () {
        $(this).parent().addClass('hover');
    }, function () {
        $(this).parent().removeClass('hover');
    });

    // Hide context menu on some events
    $.each('click dragstart zoom_changed maptypeid_changed'.split(' '), function (i, name) {
        google.maps.event.addListener(map, name, function () { contextMenu.hide() });
    });
}
//Xóa các marker trên map
function DeleteAllMarker()
{
    for(i=0; i<MarkersList.length; i++)
    {
        MarkersList[i].setMap(null);
    }
    MarkersList = [];
    infoWindowList = [];
}

//Tim kiếm các Marker đã được hiển thị trên map
function isExisted(id)
{
    for(i=0; i<MarkersList.length; i++)
    {
        if(MarkersList[i].getTitle() == id.toString())
            return true;
    }
    return false;
}
//Tương tác với marker từ tab kết quả 
function HightLightMarker(id)
{
    for(i=0; i<MarkersList.length; i++)
    {
        if(MarkersList[i].getTitle() == id.toString())
        {
            for(j=0; j<infoWindowList.length; j++)
            {
                if(infoWindowList[j].getPosition() == MarkersList[i].getPosition())
                    infoWindowList[j].open(map, MarkersList[i]);
                else infoWindowList[j].close();
            }
        }
    }
} 
//Hiển thị địa điểm lên bản đồ 
function placeSavedMarker(location, description, id, data) {
        var marker = new google.maps.Marker({
            position: location,
            map: map,
            title: id.toString()
        });
        var content = document.createElement('div');
        var link = "http://" + domainUrl + "/doanhiendai/controller/InfoWindow";
        $.ajax({ url: link,
            data: {id: id},
            success: function (data) {
                content.innerHTML = data;
            },
            error:function (xhr, ajaxOptions, thrownError){
            }
        });
        var infoWindow = new google.maps.InfoWindow({
            content: content,
            position: location
        });

        MarkersList.push(marker);
        infoWindowList.push(infoWindow);
    	google.maps.event.addListener(marker, 'click', function () {
        for(i=0;i<infoWindowList.length;i++)
        {
            if(infoWindowList[i].getPosition() == marker.getPosition())
                infoWindowList[i].open(map, marker);
            else infoWindowList[i].close();
        }
        $("#resultTab li").each(
            function(){
                if(this.id == id)
                    this.setAttribute("class", "hover");
                else
                    this.removeAttribute("class");
        });
    });
}

function toggleBounce() {

    if (marker.getAnimation() != null) {
        marker.setAnimation(null);
    } else {
        marker.setAnimation(google.maps.Animation.BOUNCE);
    }
}

//Hàm tìm đường đi
function calcRoute() {

    var request = {
        origin: start,
        destination: end,
        travelMode: google.maps.TravelMode.DRIVING
    };

    directionsService.route(request, function (result, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            directionsDisplay.setDirections(result);
			$('ul#tabbando li a').removeClass('ui-tabs-selected');
			$('ul#tabbando li:last-child a').addClass('ui-tabs-selected');
			
			var currentTab = $('ul#tabbando li:last-child a').attr('id');
			$(currentTab).siblings().addClass('ui-tabs-hide');
			$(currentTab).removeClass('ui-tabs-hide');
			
        }
        else {
            displayMessage('#notify','không tìm được đường đi','attention');
        }
    });
}
function DirectionTo(lat, lng)
{
    if(start == null || start == '')
    {
		displayMessage('#loi','Bạn chưa chọn điểm xuất phát.\n Bấm chuột phải để chọn điểm xuất phát rồi chọn tìm đường đến đây','attention');
        return;
    }
	$('#loi').hide();
    startMarker.setMap(null);
    var pos = new google.maps.LatLng(lat, lng);
    end = pos;

    calcRoute();
}

//xóa đường đi
function xoaTimDuong()
{
	start = null;
	start = '';
    end = '';
	end = null;
    directionsDisplay.setMap(null);
    directionsDisplay = new google.maps.DirectionsRenderer();
    directionsDisplay.setMap(map);
    directionsDisplay.setPanel(document.getElementById("DirectionResult"));
    document.getElementById("DirectionResult").innerHTML = "";
}
var dId = 2;
function timDuong() {
    var start = '';
    var end = '';
    var waypts = [];
    for (var i = 1; i <= dId; i++) {
        if(document.getElementById("DInput" + i) != null)
        {
            waypts.push({
                location: document.getElementById("DInput" + i).value,
                stopover: true
            });
        }
    }

    start = waypts.shift().location;
    end = waypts.pop().location;

    var request;
    if (start == '' || end == '') {
		displayMessage('#notify','Nhập điểm xuất phát hoặc điểm đến','error');
    }
    else {
        request = {
            origin: start,
            destination: end,
            waypoints: waypts,
            optimizeWaypoints: true,
            travelMode: google.maps.TravelMode['DRIVING']
        };
        directionsService.route(request, function(result, status) {
            if (status == google.maps.DirectionsStatus.OK) {
                directionsDisplay.setDirections(result);
            }
            else {
                alert("Không tìm được đường đi");
            }
        });
    }
}


//xóa tab kết quả
function ClearResultTab()
{
    var resultDiv = document.getElementById("resultTab");
    resultDiv.innerHTML = "";
}

//Xu ly phan trang

var maxLength;
var sotrangtrendong;


//Tìm kiếm theo các tiêu chí (AdvanceSearch)

function AdvanceSearch()
{
    var domainUrl=window.location.href.match(/:\/\/(.[^/]+)/)[1];
    link = "http://" + domainUrl + "/doanhiendai/controller/AdvanceSearch";
	var City = document.getElementById("tinhthanh").value;
    if(City == ""){
        City = "";
    }
    var District = document.getElementById("quanhuyen").value;
	if(District == ""){
		District = "";
	}
	var Group = document.getElementById("PlaceRevision_Group").value
    conditionString =  City + '_' + District + '_' + Group;

    $.ajax({ 
        url: "http://" + domainUrl + "/doanhiendai/controller/GetCountNumber_Advance",
        dataType: 'json', type: "POST",
        data: { _conditionString: conditionString},
        success: function (data) {
            maxLength = parseInt(data);
            if(maxLength > 6){
                document.getElementById("left_menu2").setAttribute("style", "overflow-y:auto");
            }
			if( maxLength > 0){
				var optInit = getOptions2();
				$("#Pagination").pagination(maxLength, optInit);
			}
			if( maxLength == 0){
				ClearResultTab();
				var resultInfo = document.getElementById("resultInfo");
				resultInfo.innerHTML = "Không có địa điểm nào được tìm thấy";
			
				$('.pagination').hide();
			}
        },
        error:function (xhr, ajaxOptions, thrownError){
        }
    });
    
}

function getOptions2() {
    var opt = { callback: pageselectCallback2 };
    opt.items_per_page = 6;
    opt.num_display_entries = 6;
    opt.num_edge_entries = 0;
    return opt;
}
function pageselectCallback2(page_index, jq) {
    var items_per_page = parseInt((document.body.clientHeight - 159 - 30 - 27) / 83);
            //Tinh toan xuat ra so 1-20 trong ???
        var iStart = (page_index) * items_per_page + 1;
        var iEnd = (page_index + 1) * items_per_page;
        if (iEnd > maxLength) {
            iEnd = maxLength;
        }
    sotrangtrendong = ""+iStart+" - "+iEnd+"" ;
    var max_elem = Math.min((page_index + 1) * items_per_page, maxLength);
    AdvanceSearchPager(link, conditionString, page_index + 1, items_per_page);
    return false;
}
function AdvanceSearchPager(link, conditionString, pageNumber, pageSize)
{
    Waiting('on');
    DeleteAllMarker();
    $.ajax({ url: link, dataType: 'json', type: "POST",
        data: { pageNumber: pageNumber, pageSize: pageSize, _conditionString: conditionString},
        success: function (data) {
            for (var i = 0; i < data.length; i++) {
                var pos = new google.maps.LatLng(data[i].ViDo, data[i].KinhDo);
                map.setCenter(pos);
                placeSavedMarker(pos, data[i].TenDiaDiem, data[i].MaDiaDiem, data[i]);
                NewsIdList.push(data[i].MaDiaDiem);
            }
            ShowResult();      
        },
        error:function (xhr, ajaxOptions, thrownError){
        }
    });
}
//Xử lý loading.gif
function Waiting(turn)
{
    if(turn == 'on'){
        document.getElementById("resultTab").style.display = 'none';
        document.getElementById("Pagination").style.display = 'none';
        document.getElementById("resultInfo").style.display = 'none';
        document.getElementById("Loading").style.display = 'block';    
    }
    else{
        document.getElementById("resultTab").style.display = 'block';
        document.getElementById("Pagination").style.display = 'block';
        document.getElementById("resultInfo").style.display = 'block';
        document.getElementById("Loading").style.display = 'none';
    }
}
//Hiển thị kết quả tìm kiếm ra tab kết quả
function ShowResult()
{
    var bounds = new google.maps.LatLngBounds();
    for(i=0; i<MarkersList.length; i++)
    {
        bounds.extend(MarkersList[i].getPosition());
    }
    map.fitBounds(bounds);


    var resultInfo = document.getElementById("resultInfo");
    resultInfo.innerHTML = "Kết quả: " + "<strong class='bando_red'> "+ sotrangtrendong +" </strong>" + "trong <strong class='bando_red'>" + maxLength + "</strong> kết quả";

    var resultDiv = document.getElementById("resultTab");

    var domainUrl=window.location.href.match(/:\/\/(.[^/]+)/)[1];
    var link = "http://" + domainUrl + "/doanhiendai/controller/ResultElement";
    $.ajax({ url: link,
 		type: "post",
        data: {list: NewsIdList},
        success: function (data) {

        resultDiv.innerHTML = data;

        var widthLeftMenu2 = $("#left_menu2").width();
        var weidthNd_leftbd = widthLeftMenu2 - 70 - 50 - 10 ;
        $('.nd_leftbd').css({ 'width': weidthNd_leftbd + 'px' });

            var items_per_page = parseInt((document.body.clientHeight - 159 - 30 - 31) / 83);
            var mod_items_per_page = parseInt((document.body.clientHeight - 159 - 30 -31 ) % 83);
            sotrangtrendong = items_per_page;
            var height_perpage = mod_items_per_page/items_per_page+60;
            $('.item_perpage').css({ 'height': height_perpage + 'px' });

            Waiting('off');
        },
        error:function (xhr, ajaxOptions, thrownError){
        }
    });
    NewsIdList = [];
}
